/**
 * 名称：获取构件属性信息
 * 作用：通过点击来获取构件信息，并展示到屏幕上
 * 参数：type：Polyline、Polygon
 * start：开始，
 * end:结束
 * 状态：
 * 网址：https://blog.csdn.net/qq_40323256/article/details/128178560
 * 负责人：
 */
let modelColorData = {
    data: null,
    color: null
}
// 记录属性查询的点击，第一次点击为开启，第二次则为关闭
let attributeOFF = true
function getAttributeData(){
    // 删除所有鼠标事件
    deleteHandlerFu()
    if (attributeOFF){
        attributeOFF = !attributeOFF
        // 通过点击获取构件属性
        handler.setInputAction(function (click) {
            let pickedFeature = viewer.scene.pick(click.position)
            // 当没有数据的时候
            if(pickedFeature === undefined) {
                attributePoputDelete()
                // 当点击地球的时候需要将上一次点击的构件颜色复原
                if (modelColorData.data!==null){
                    // 恢复上一次点击颜色
                    modelColorData.data.color = modelColorData.color
                }
            }else {
                if (modelColorData.data === null){
                    // 直接将上一个的颜色复原，然后
                    modelColorData.data = pickedFeature
                    modelColorData.color =  pickedFeature.color
                    pickedFeature.color = Cesium.Color.fromCssColorString('#52FC56E5')
                }else {
                    // 恢复上一次点击颜色
                    modelColorData.data.color = modelColorData.color
                    // 记录本次点击构件信息
                    modelColorData.data = pickedFeature
                    modelColorData.color =  pickedFeature.color
                    // 给与构件新的颜色
                    pickedFeature.color = Cesium.Color.fromCssColorString('#52FC56E5')
                }
            }
            // 获取构件属性信息
            var modelMap = getModelData(pickedFeature, true, null)
            // 创建自定义属性列表html
            if (modelMap.size > 0){
                let html = ''
                for(let key of modelMap.keys()) {
                    html += '<li><span>' + key + '：</span><span>' + modelMap.get(key) + '</span></li>'
                }
                addCustomAttributeHtml(html)
            }

        }, Cesium.ScreenSpaceEventType.LEFT_CLICK)
        console.log('开启属性查询')
    }else {
        attributePoputDelete()
        modelColorData.data.color = modelColorData.color
        modelColorData.data = null
        modelColorData.color = null
        attributeOFF = !attributeOFF
        console.log('关闭属性查询')
    }
}

/**
 * 名称：生成自定义html列表
 * 作用：通过自定义的html标签来进行属性列表的生成
 * 参数：
 * @param html:html标签
 * 状态：已完成
 * 网址：
 * 负责人：朱小波
 */
const addCustomAttributeHtml = (html) => {
    attributePoputDelete()
    // 创建标签
    const attribute = document.createElement("div");
    attribute.className = 'attributeQuery'
    attribute.id = 'attributeQuery-id'
    attribute.innerHTML = '        <!--头部-->' +
        '        <div class="attributeQuery-titer">' +
        '          <div>属性查询</div>' +
        '            <div onclick="attributePoputDelete()">' +
        '                <img src="Source/Images/layer/esc.png">' +
        '            </div>' +
        '        </div>' +
        '        <!--信息部位-->' +
        '        <div class="attributeQuery-text-list">' +
        '            <ul>' + html +
        '            </ul>' +
        '        </div>'
    document.body.appendChild(attribute)
}

/**
 * 名称：模型属性数据组织
 * 作用：通过传入的坐标参数（position）来对模型信息进行获取
 * 参数：pickedFeature: 构件信息， memberName: 构件名称(当值为null的时候就不做指定直段值的返回操作), status:空值过滤
 * @param
 * 状态：已完成
 * 网址：
 * 负责人：朱小波
 */
const getModelData = (pickedFeature, status, memberName) => {
    // 构件属性信息存储
    var modelMap = new Map()
    // 当没有数据的时候
    if(pickedFeature === undefined) {
        return modelMap
    }
    // 过滤模型属性信息
    if(pickedFeature._content._batchTable._properties !== undefined) {
        for(let key in pickedFeature._content._batchTable._properties) {
            if (memberName!== null && status) {
                // 返回指定字段的值
                if (memberName === key) {
                    if(pickedFeature.getProperty(key) !== 0 && pickedFeature.getProperty(key) !== null){
                        return modelMap.set(key, pickedFeature.getProperty(key))
                    }else {
                        return modelMap
                    }
                }
            }else {
                // 属性信息
                if(status) {
                    console.log('查看值的信息：' , key)
                    // 存储值为非空或不等于0的数据
                    if(pickedFeature.getProperty(key) !== 0 && pickedFeature.getProperty(key) !== null){
                        modelMap.set(key, pickedFeature.getProperty(key))
                    }
                } else {
                    // 存储所有数据
                    modelMap.set(key, pickedFeature.getProperty(key))
                }
            }
        }
        console.log('查看获取所有信息的返回数：', bacjwaterData[1])
        return modelMap
    }
    return modelMap
}

/**
 * 名称：删除属性弹窗
 * 作用：进行判断，如果弹窗存在就将其进行删除
 * 参数：
 * @param
 * 状态：已完成
 * 网址：
 * 负责人：朱小波
 */
function attributePoputDelete(){
    const id = document.getElementById('attributeQuery-id')
    if ( id !== null && id !== undefined){
        id.remove()
    }
}
// attributeQuery-id
